// 用户相关API接口
const { request } = require('../utils/request');

/**
 * 用户注册
 * @param {object} data 注册数据
 * @param {string} data.username 用户名
 * @param {string} data.password 密码
 * @param {string} data.confirmPassword 确认密码
 * @param {string} data.role 用户角色
 */
function register(data) {
  return request('/api/auth/register', {
    method: 'POST',
    data: data
  })
}

/**
 * 用户登录
 * @param {object} data 登录数据
 * @param {string} data.loginIdentifier 用户名或账号或手机号
 * @param {string} data.password 密码
 * @param {string} data.role 用户角色
 */
function login(data) {
  return request('/api/auth/login', {
    method: 'POST',
    data: data
  })
}

/**
 * 重置密码（忘记密码时使用）
 * @param {object} data 重置密码数据
 * @param {string} data.loginIdentifier 用户名或账号或手机号
 * @param {string} data.newPassword 新密码
 * @param {string} data.confirmPassword 确认新密码
 */
function resetPassword(data) {
  return request('/api/auth/reset-password', {
    method: 'POST',
    data: data
  })
}

/**
 * 修改密码（需要原密码）
 * @param {object} data 修改密码数据
 * @param {string} data.loginIdentifier 用户名或账号或手机号
 * @param {string} data.oldPassword 原密码
 * @param {string} data.newPassword 新密码
 * @param {string} data.confirmPassword 确认新密码
 */
function changePassword(data) {
  return request('/api/auth/reset-password', {
    method: 'POST',
    data: data
  })
}

/**
 * 校验用户是否存在
 * @param {object} data 校验数据
 * @param {string} data.loginIdentifier 用户名或账号或手机号
 */
function validateUser(data) {
  return request('/api/auth/validate-user', {
    method: 'POST',
    data: data
  })
}

/**
 * 修改个人信息
 * @param {object} data 个人信息数据
 * @param {string} data.loginIdentifier 用户标识
 * @param {string} data.name 姓名
 * @param {string} data.idCard 身份证号
 * @param {string} data.gender 性别
 * @param {string} data.birthDate 出生日期
 * @param {string} data.phone 手机号
 * @param {string} data.province 省份
 * @param {string} data.city 城市
 * @param {string} data.county 县区
 * @param {string} data.village 村庄
 * @param {string} data.address 详细地址
 * @param {string} data.postalCode 邮政编码
 * @param {string} data.avatar 头像URL
 */
function updateProfile(data) {
  return request('/api/auth/update-profile', {
    method: 'POST',
    data: data
  })
}

/**
 * 绑定邮箱
 * @param {object} data 绑定邮箱数据
 * @param {string} data.loginIdentifier 用户标识
 * @param {string} data.email 邮箱地址
 * @param {string} data.password 登录密码
 */
function bindEmail(data) {
  return request('/api/auth/bind-email', {
    method: 'POST',
    data: data
  })
}

/**
 * 解绑邮箱
 * @param {object} data 解绑邮箱数据
 * @param {string} data.loginIdentifier 用户标识
 * @param {string} data.password 登录密码
 */
function unbindEmail(data) {
  return request('/api/auth/unbind-email', {
    method: 'POST',
    data: data
  })
}

/**
 * 获取用户列表（排除管理员）
 * @param {object} params 查询参数
 * @param {number} params.page 页码，从1开始
 * @param {number} params.pageSize 每页数量，最大100
 * @param {string} params.keyword 搜索关键词，支持姓名、手机号、邮箱、用户名
 * @param {string} params.status 状态筛选：all(全部)、active(正常)、inactive(未激活)、banned(已禁用)
 * @param {string} params.sortBy 排序字段：created_at(创建时间)、last_login_time(最后登录)、login_count(登录次数)、name(姓名)
 * @param {string} params.sortOrder 排序方式：asc(升序)、desc(降序)
 */
function getUsers(params = {}) {
  return request('/api/auth/list', {
    method: 'GET',
    data: params
  })
}

/**
 * 获取用户统计信息
 */
function getUserStats() {
  return request('/api/auth/users/stats', {
    method: 'GET'
  })
}

/**
 * 获取用户总数量（按角色分类）
 */
function getUserCount() {
  return request('/api/auth/users/count', {
    method: 'GET'
  })
}

/**
 * 管理员修改用户信息
 * @param {object} data 用户信息数据
 * @param {number} data.userId 用户ID
 * @param {string} data.name 姓名
 * @param {string} data.idCard 身份证号
 * @param {string} data.gender 性别 (male/female/other)
 * @param {string} data.birthDate 出生日期
 * @param {string} data.phone 手机号
 * @param {string} data.email 邮箱
 * @param {string} data.province 省份
 * @param {string} data.city 城市
 * @param {string} data.county 县区
 * @param {string} data.village 村庄
 * @param {string} data.address 详细地址
 * @param {string} data.postalCode 邮政编码
 * @param {string} data.status 用户状态 (active/cancelled/banned)
 */
function adminUpdateUser(data) {
  return request('/api/auth/admin/update-user', {
    method: 'POST',
    data: data
  })
}

/**
 * 删除用户（管理员专用）
 * @param {object} data 删除用户数据
 * @param {number} data.userId 用户ID
 * @param {boolean} data.confirmDelete 确认删除，必须为true
 */
function deleteUser(data) {
  return request('/api/auth/admin/delete-user', {
    method: 'DELETE',
    data: data
  })
}

/**
 * 上传头像
 * @param {string} filePath 本地文件路径
 */
function uploadAvatar(filePath) {
  return new Promise((resolve, reject) => {
    const app = getApp()
    const baseUrl = app.globalData.baseUrl || 'http://localhost:3000'
    
    wx.uploadFile({
      url: `${baseUrl}/api/upload/single`,
      filePath: filePath,
      name: 'image',
      header: {
        'Content-Type': 'multipart/form-data'
      },
      success: (res) => {
        try {
          const data = JSON.parse(res.data)
          if (data.success) {
            resolve({
              success: true,
              data: data.data
            })
          } else {
            reject(new Error(data.message || '上传失败'))
          }
        } catch (error) {
          reject(new Error('解析响应数据失败'))
        }
      },
      fail: (error) => {
        reject(error)
      }
    })
  })
}

module.exports = {
  register,
  login,
  resetPassword,
  changePassword,
  validateUser,
  updateProfile,
  bindEmail,
  unbindEmail,
  getUsers,
  getUserStats,
  getUserCount,
  adminUpdateUser,
  deleteUser,
  uploadAvatar
}
